<?php
namespace Web\Logic;
class  Excel{
    //导入数据方法
     //导入数据方法
    public function dataInsert($filename, $exts='xls',$tableName,$row=2,$column='1')
    {
        set_time_limit(0);
        //导入PHPExcel类库，因为PHPExcel没有用命名空间，只能inport导入
        import("Org.Util.PHPExcel");
        //创建PHPExcel对象，注意，不能少了\
        $PHPExcel=new \PHPExcel();
        //如果excel文件后缀名为.xls，导入这个类
        if($exts == 'xls'){
            import("Org.Util.PHPExcel.Reader.Excel5");
            $PHPReader=new \PHPExcel_Reader_Excel5();
        }else if($exts == 'xlsx'){
            import("Org.Util.PHPExcel.Reader.Excel2007");
            $PHPReader=new \PHPExcel_Reader_Excel2007();
        }

        $data=array();
        $data_sum=array();

        //载入文件
        $PHPExcel=$PHPReader->load($filename);
        //获取表中的第一个工作表，如果要获取第二个，把0改为1，依次类推
        $currentSheet = $PHPExcel->getSheet(0);

        //获取总列数
        $allColumn= \PHPExcel_Cell::columnIndexFromString($currentSheet->getHighestColumn());
        //获取总行数
        $allRow=$currentSheet->getHighestRow();
        //循环获取表中的数据，$currentRow表示当前行，从哪行开始读取数据，索引值从0开始

        //取得要读取的字段
        $comLogic = new \Web\Logic\Common();
        $items = $comLogic->getUploadItem($tableName);
        $xw_data = M($tableName);
        for($currentRow = $row; $currentRow<=$allRow;$currentRow++){
            //从哪列开始，A表示第一列
            $index = 0;
            for($currentColumn= 1;$currentColumn<=$allColumn;$currentColumn++){
                //数据坐标
                $address=$currentColumn.$currentRow;
                //读取到的数据，保存到数组$arr中
                $cell =$currentSheet->getCellByColumnAndRow($currentColumn,$currentRow)->getValue();
                if($cell instanceof PHPExcel_RichText){
                    $cell  = $cell->__toString();
                }
                $itemName = $items[$index];
                $data[$itemName]=$cell;

                $index++;
            }

            $xw_data->add($data);
            unset($data);

        }
    }

     //导出数据方法
     //导出数据方法
    public function dataOutput($array,$headname,$excelName)
    {
        set_time_limit(0);
        //导入PHPExcel类库，因为PHPExcel没有用命名空间，只能inport导入
        import("Org.Util.PHPExcel");
        $objPHPExcel = new \PHPExcel();

        // 设置文件的一些属性，在xls文件——>属性——>详细信息里可以看到这些值，xml表格里是没有这些值的
        $objPHPExcel
          ->getProperties()  //获得文件属性对象，给下文提供设置资源
          ->setCreator( "Maarten Balliauw")                 //设置文件的创建者
          ->setLastModifiedBy( "WYF")          //设置最后修改者
          ->setTitle( "Office 2007 XLSX Test Document" )    //设置标题
          ->setSubject( "Office 2007 XLSX Test Document" )  //设置主题
          ->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes.") //设置备注
          ->setKeywords( "office 2007 openxml php")        //设置标记
          ->setCategory( "Test result file");                //设置类别


        // 位置aaa  *为下文代码位置提供锚
        // 给表格添加数据
        $currentSheet = $objPHPExcel->setActiveSheetIndex(0);

        //设置头部
        //
        $currentRow = 1;
        $currentColumn = 0;
        foreach($headname as $k =>$v)
        {
         $currentSheet ->setCellValueExplicitByColumnAndRow($currentColumn,$currentRow, $v);
         $currentColumn++;

        }

        $currentRow++;
        foreach($array as $k =>$v)
        {
              $currentColumn = 0;
              foreach($v as $mk =>$mv)
              {
                    $currentSheet ->setCellValueExplicitByColumnAndRow($currentColumn,$currentRow, $mv);

                     $currentColumn++;
              }
              $currentRow++;

        }
        $currentSheet->getColumnDimension('A')->setAutoSize(true);
        $currentSheet->getColumnDimension('B')->setAutoSize(true);
        $currentSheet->getColumnDimension('C')->setAutoSize(true);
        $currentSheet->setTitle('data');

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$excelName.'.xls');
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }

     //导出数据方法
     //导出数据方法
    public function dataOutputSheet($array,$excelName)
    {
        set_time_limit(0);
        //导入PHPExcel类库，因为PHPExcel没有用命名空间，只能inport导入
        import("Org.Util.PHPExcel");
        $objPHPExcel = new \PHPExcel();

        // 设置文件的一些属性，在xls文件——>属性——>详细信息里可以看到这些值，xml表格里是没有这些值的
        $objPHPExcel
          ->getProperties()  //获得文件属性对象，给下文提供设置资源
          ->setCreator( "Maarten Balliauw")                 //设置文件的创建者
          ->setLastModifiedBy( "WYF")          //设置最后修改者
          ->setTitle( "Office 2007 XLSX Test Document" )    //设置标题
          ->setSubject( "Office 2007 XLSX Test Document" )  //设置主题
          ->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes.") //设置备注
          ->setKeywords( "office 2007 openxml php")        //设置标记
          ->setCategory( "Test result file");                //设置类别


        // 位置aaa  *为下文代码位置提供锚
        // 给表格添加数据

        for($i = 0 ; $i < count($array);$i++){
                if($i == 0){
                   $currentSheet = $objPHPExcel->setActiveSheetIndex(0);
                } else{

                $objPHPExcel ->createSheet();
                $currentSheet = $objPHPExcel->setActiveSheetIndex($i);
                }
                $list = $array[$i];
                //设置头部
                //
                $currentRow = 1;
                $currentColumn = 0;
                foreach($list['headName'] as $k =>$v)
                {
                     $currentSheet ->setCellValueExplicitByColumnAndRow($currentColumn,$currentRow, $v);
                     $currentColumn++;

                }

                $currentRow++;
                foreach($list['data'] as $k =>$v)
                {
                      $currentColumn = 0;
                      foreach($v as $mk =>$mv)
                      {
                            $currentSheet ->setCellValueExplicitByColumnAndRow($currentColumn,$currentRow, $mv);

                             $currentColumn++;
                      }
                      $currentRow++;

                }
                $currentSheet->getColumnDimension('A')->setAutoSize(true);
                $currentSheet->getColumnDimension('B')->setAutoSize(true);
                $currentSheet->getColumnDimension('C')->setAutoSize(true);
                $currentSheet->setTitle($list['title']);
        }
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$excelName.'.xls');
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }



     //导出数据方法
     //导出数据方法
    public function dataCheckOutput($array,$headname,$excelName,$title)
    {
        set_time_limit(0);
        //导入PHPExcel类库，因为PHPExcel没有用命名空间，只能inport导入
        import("Org.Util.PHPExcel");
        $objPHPExcel = new \PHPExcel();

        // 设置文件的一些属性，在xls文件——>属性——>详细信息里可以看到这些值，xml表格里是没有这些值的
        $objPHPExcel
          ->getProperties()  //获得文件属性对象，给下文提供设置资源
          ->setCreator( "Maarten Balliauw")                 //设置文件的创建者
          ->setLastModifiedBy( "WYF")          //设置最后修改者
          ->setTitle( "Office 2007 XLSX Test Document" )    //设置标题
          ->setSubject( "Office 2007 XLSX Test Document" )  //设置主题
          ->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes.") //设置备注
          ->setKeywords( "office 2007 openxml php")        //设置标记
          ->setCategory( "Test result file");                //设置类别


        // 位置aaa  *为下文代码位置提供锚
        // 给表格添加数据
        $currentSheet = $objPHPExcel->setActiveSheetIndex(0);

        //设置头部
        //

        //合并单元格
        $currentSheet -> mergeCells('A18:E22');

        $currentRow = 1;
        $currentColumn = 0;
        foreach($headname as $k =>$v)
        {
         $currentSheet ->setCellValueExplicitByColumnAndRow($currentColumn,$currentRow, $v);
         $currentColumn++;
        }

        $currentRow++;
        foreach($array as $k =>$v)
        {
              $currentColumn = 0;
              foreach($v as $mk =>$mv)
              {
                    $currentSheet ->setCellValueExplicitByColumnAndRow($currentColumn,$currentRow, $mv);
                     $currentColumn++;
              }
              $currentRow++;

        }

        $currentSheet->setTitle('data');

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$excelName.'.xls');
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }
}
?>
